/*
* 设备使用
* */

import 'package:center_beijing/api/task_api.dart';
import 'package:center_beijing/common/numLengthInputFormatter.dart';
import 'package:flutter/material.dart';
import 'package:center_beijing/common/QRScan.dart';
import 'package:center_beijing/common/styles.dart';
import 'package:center_beijing/config/routeConfig.dart';
import 'package:center_beijing/widgets/custom_input_widget.dart';
import 'package:center_beijing/widgets/custom_loading_widget.dart';
import 'package:center_beijing/widgets/selectRow_widget.dart';
import 'package:center_beijing/widgets/textarea_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_pickers/time_picker/model/date_mode.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'dart:io';
import 'package:get/get.dart';
import 'dart:convert';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:left_scroll_actions/cupertinoLeftScroll.dart';
import 'package:left_scroll_actions/global/actionListener.dart';

class EquipmentUse extends StatefulWidget {
  @override
  _EquipmentUseState createState() => _EquipmentUseState();
}

class _EquipmentUseState extends State<EquipmentUse> {
  CustomLoading loading = CustomLoading.withMessage('保存中...');
  List selectList = [];
  var workAddress = TextEditingController(); //工作地点
  var workDetail = TextEditingController(); //工作内容
  var workHour = TextEditingController(); //运转台时
  var allWorkHour = TextEditingController(); //总运转台时
  var usePerson = TextEditingController(); //使用人员
  var fuelConsumption = TextEditingController(); //燃油消耗
  var powerConsumption = TextEditingController(); //电力消耗
  var lubricatingConsumption = TextEditingController(); //润滑油消耗

  var remark = ''; //备注

  var startDate = ''; //开始时间
  var endDate = ''; //结束时间

  getEquipmentDetail(compId) async {
    var pass = {'id': compId};
    var result = await getEquipmentInfo(pass);
    if (result != null && result['errorMessage'] == null) {
      selectList = [];
      this.setState(() {
        selectList.add(result);
      });
    }
  }

  bool justify() {
    if (selectList.length == 0) {
      Fluttertoast.showToast(msg: '请选择设备');
      return false;
    } else if(workAddress.text==''){
      Fluttertoast.showToast(msg: '请输入工作地点');
      return false;
    } else if(workDetail.text==''){
      Fluttertoast.showToast(msg: '请输入工作内容');
      return false;
    }else if(startDate==''){
      Fluttertoast.showToast(msg: '请选择开始时间');
      return false;
    }else if(endDate==''){
      Fluttertoast.showToast(msg: '请选择结束时间');
      return false;
    }else {
      return true;
    }
  }

  /*
  * 提交
  * */
  submit() async {
    loading.show(delay: 20);
    var pass = {
      'item': json.encode({
        'machineId': selectList[0]['id'],
        'workAddr': workAddress.text,
        'workContent': workDetail.text,
        'startTime': startDate,
        'endTime': endDate,
        'currentRunHour': workHour.text,
        'totalRunHour': allWorkHour.text,
        'operatorId': usePerson.text,
        'oilCost': fuelConsumption.text,
        'powerCost': powerConsumption.text,
        'lubeCost': lubricatingConsumption.text,
        'remark': remark
      }),
    };
    var result = await saveEquipmentUseRecord(pass);
    loading.dismiss();
    if (result != null) {
      Fluttertoast.showToast(msg: '保存完成');
      Get.back();
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('设备使用'),
        ),
        body: SafeArea(
          child: GestureDetector(
            onTap: (){
              FocusScope.of(context).requestFocus(FocusNode());
            },
            child: Container(
              padding: EdgeInsets.only(
                  bottom: MediaQuery.of(context).padding.bottom + 40),
              child: SingleChildScrollView(
                child: Column(
                  children: [
                    Container(
                      padding: EdgeInsets.fromLTRB(
                          Styles.spacing16, 0, Styles.spacing16, 0),
                      margin: EdgeInsets.fromLTRB(
                          0, Styles.spacing8, 0, Styles.spacing8),
                      child: Row(
                        children: [
                          Expanded(
                            child: GestureDetector(
                              onTap: () async {
                                var result = await Get.toNamed(
                                    RouteConfig.selectEquipment);
                                if (result != null) {
                                  selectList = [];
                                  selectList.add(result);
                                  this.setState(() {});
                                }
                              },
                              child: Container(
                                alignment: Alignment.center,
                                padding: EdgeInsets.fromLTRB(
                                    Styles.spacing16,
                                    Styles.spacing8,
                                    Styles.spacing16,
                                    Styles.spacing8),
                                decoration: BoxDecoration(
                                    color: Styles.GrayLight,
                                    border: Border.all(
                                        color: Styles.LineColor, width: 1),
                                    borderRadius: BorderRadius.all(
                                        Radius.circular(4.0.r))),
                                child: Text(
                                  '搜索/手动选择设备',
                                  style: TextStyle(
                                      color: Styles.LeftTitleColor,
                                      fontSize: Styles.NormalFont),
                                ),
                              ),
                            ),
                          ),
                          GestureDetector(
                            onTap: () async {
                              var result = await QrScan.scan(context, type: 2);
                              if (result != null) {
                                this.getEquipmentDetail(result['code']);
                              }
                            },
                            child: Container(
                              color: Styles.BlueColor,
                              padding: EdgeInsets.fromLTRB(
                                  Styles.spacing8,
                                  Styles.spacing8,
                                  Styles.spacing8,
                                  Styles.spacing8),
                              margin: EdgeInsets.only(left: Styles.spacing16),
                              child: Image.asset(
                                'assets/images/scan.png',
                                width: 20.w,
                                height: 20.h,
                                fit: BoxFit.contain,
                                color: Colors.white,
                              ),
                            ),
                          )
                        ],
                      ),
                    ),
                    Column(
                      children: this.selectList.map((item) {
                        return CupertinoLeftScroll(
                          // important, each Row must have different key.
                          // DO NOT use '$index' as Key! Use id or title.
                          key: Key(item.toString()),
                          // left scroll widget will auto close while the other widget is opened and has same closeTag.
                          // 当另一个有相同closeTag的组件打开时，其他有着相同closeTag的组件会自动关闭.
                          closeTag: LeftScrollCloseTag(item.toString()),
                          buttonWidth: 80,
                          child: Container(
                            color: Colors.white,
                            padding: EdgeInsets.fromLTRB(
                                Styles.spacing8,
                                Styles.spacing8,
                                Styles.spacing8,
                                Styles.spacing8),
                            margin: EdgeInsets.only(top: Styles.spacing8),
                            child: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: [
                                Row(
                                  children: [
                                    Container(
                                      margin: EdgeInsets.only(
                                          right: Styles.spacing8),
                                      height: 20.h,
                                      width: 4.w,
                                      color: Styles.BlueColor,
                                    ),
                                    Text(
                                      item['name'] != null
                                          ? item['name']
                                          : (item['equipmentName'] != null
                                          ? item['equipmentName']
                                          : '--'),
                                      style: TextStyle(
                                          color: Styles.DetailColor,
                                          fontSize: Styles.Middle16Font),
                                    ),
                                  ],
                                ),
                                Container(
                                  margin: EdgeInsets.fromLTRB(Styles.spacing8,
                                      Styles.spacing8, Styles.spacing8, 0),
                                  child: Column(
                                    crossAxisAlignment:
                                    CrossAxisAlignment.start,
                                    children: [
                                      Text(
                                        (item['attr'] != null &&
                                            item['attr']['modelType'] !=
                                                null)
                                            ? item['attr']['modelType']
                                            : (item['modelType'] != null
                                            ? item['modelType']
                                            : '--'),
                                        style: TextStyle(
                                            color: Styles.DetailColor,
                                            fontSize: Styles.Middle16Font),
                                      ),
                                      Text(
                                        (item['attr'] != null &&
                                            item['attr']['address'] != null)
                                            ? item['attr']['address']
                                            : (item['address'] != null
                                            ? item['address']
                                            : '--'),
                                        style: TextStyle(
                                            color: Styles.LeftTitleColor,
                                            fontSize: Styles.NormalFont),
                                      ),
                                    ],
                                  ),
                                ),
                              ],
                            ),
                          ),
                          buttons: <Widget>[
                            GestureDetector(
                              onTap: () {
                                print('删除');
                                this.selectList.remove(item);
                                this.setState(() {

                                });
                              },
                              child: Container(
                                margin: EdgeInsets.fromLTRB(
                                    0, 0, Styles.spacing16, 0),
                                decoration: BoxDecoration(
                                  color: Styles.RedColor,
                                  borderRadius:
                                  BorderRadius.all(Radius.circular(14.0.r)),
                                ),
                                alignment: Alignment.center,
                                child: Column(
                                  mainAxisAlignment: MainAxisAlignment.center,
                                  children: [
                                    Image(
                                      image: AssetImage(
                                          'assets/images/delete.png'),
                                      width: 16.w,
                                      height: 16.w,
                                      fit: BoxFit.contain,
                                    ),
                                    Text(
                                      '删除',
                                      style: TextStyle(
                                          color: Colors.white,
                                          fontSize: Styles.NormalFont),
                                    )
                                  ],
                                ),
                              ),
                            ),
                          ],
                          onTap: () {
                            print('tap row');
                          },
                        );
                      }).toList(),
                    ),
                    Container(
                      margin: EdgeInsets.fromLTRB(0, Styles.spacing8, 0, 0),
                      padding: EdgeInsets.fromLTRB(
                          Styles.spacing8, 0, Styles.spacing8, 0),
                      child: CustomInput(
                        textAlign: TextAlign.left,
                        inputformat: [
                          LengthLimitingTextInputFormatter(20),
                        ],
                        title: '工作地点',
                        placeHold: '请输入',
                        textInput: this.workAddress,
                        clearAll: false,
                        require: true,
                      ),
                    ),
                    Container(
                      margin: EdgeInsets.fromLTRB(0, Styles.spacing8, 0, 0),
                      padding: EdgeInsets.fromLTRB(
                          Styles.spacing8, 0, Styles.spacing8, 0),
                      child: CustomInput(
                        textAlign: TextAlign.left,
                        inputformat: [
                          LengthLimitingTextInputFormatter(50),
                        ],
                        title: '工作内容',
                        placeHold: '请输入',
                        textInput: this.workDetail,
                        clearAll: false,
                        require: true,
                      ),
                    ),
                    Container(
                      margin: EdgeInsets.fromLTRB(0, Styles.spacing8, 0, 0),
                      color: Colors.white,
                      padding: EdgeInsets.fromLTRB(Styles.spacing8, 0, 0, 0),
                      child: SelectRow(
                          titleFont: Styles.MiddleFont17,
                          require: true,
                          selectType: DateMode.YMD,
                          title: '开始时间',
                          rightText: startDate,
                          selectCallback: (value) {
                            this.setState(() {
                              startDate = value;
                            });
                          }),
                    ),
                    Container(
                      margin: EdgeInsets.fromLTRB(0, Styles.spacing8, 0, 0),
                      color: Colors.white,
                      padding: EdgeInsets.fromLTRB(Styles.spacing8, 0, 0, 0),
                      child: SelectRow(
                          titleFont: Styles.MiddleFont17,
                          require: true,
                          selectType: DateMode.YMD,
                          title: '结束时间',
                          rightText: endDate,
                          selectCallback: (value) {
                            this.setState(() {
                              endDate = value;
                            });
                          }),
                    ),
                    Container(
                      margin: EdgeInsets.fromLTRB(0, Styles.spacing8, 0, 0),
                      padding: EdgeInsets.fromLTRB(
                          Styles.spacing8, 0, Styles.spacing8, 0),
                      child: CustomInput(
                        textAlign: TextAlign.left,
                        keyboardType:
                        TextInputType.numberWithOptions(decimal: true),
                        inputformat: [
                          LengthLimitingTextInputFormatter(10),
                          NumLengthInputFormatter(digit: 2),
                        ],
                        title: '本日运转台时(h)',
                        placeHold: '请输入',
                        textInput: this.workHour,
                        clearAll: false,
                        require: false,
                      ),
                    ),
                    Container(
                      margin: EdgeInsets.fromLTRB(0, Styles.spacing8, 0, 0),
                      padding: EdgeInsets.fromLTRB(
                          Styles.spacing8, 0, Styles.spacing8, 0),
                      child: CustomInput(
                        textAlign: TextAlign.left,
                        keyboardType:
                        TextInputType.numberWithOptions(decimal: true),
                        inputformat: [
                          LengthLimitingTextInputFormatter(10),
                          NumLengthInputFormatter(digit: 2),
                        ],
                        title: '累计运转台时(h)',
                        placeHold: '请输入',
                        textInput: this.allWorkHour,
                        clearAll: false,
                        require: false,
                      ),
                    ),
                    Container(
                      margin: EdgeInsets.fromLTRB(0, Styles.spacing8, 0, 0),
                      padding: EdgeInsets.fromLTRB(
                          Styles.spacing8, 0, Styles.spacing8, 0),
                      child: CustomInput(
                        textAlign: TextAlign.left,
                        inputformat: [
                          LengthLimitingTextInputFormatter(10),
                        ],
                        title: '使用人员',
                        placeHold: '请输入',
                        textInput: this.usePerson,
                        clearAll: false,
                        require: false,
                      ),
                    ),
                    Container(
                      margin: EdgeInsets.fromLTRB(0, Styles.spacing8, 0, 0),
                      padding: EdgeInsets.fromLTRB(
                          Styles.spacing8, 0, Styles.spacing8, 0),
                      child: CustomInput(
                        textAlign: TextAlign.left,
                        keyboardType:
                        TextInputType.numberWithOptions(decimal: true),
                        inputformat: [
                          LengthLimitingTextInputFormatter(10),
                          NumLengthInputFormatter(digit: 2),
                        ],
                        title: '燃油消耗(升)',
                        placeHold: '请输入',
                        textInput: this.fuelConsumption,
                        clearAll: false,
                        require: false,
                      ),
                    ),
                    Container(
                      margin: EdgeInsets.fromLTRB(0, Styles.spacing8, 0, 0),
                      padding: EdgeInsets.fromLTRB(
                          Styles.spacing8, 0, Styles.spacing8, 0),
                      child: CustomInput(
                        textAlign: TextAlign.left,
                        keyboardType:
                        TextInputType.numberWithOptions(decimal: true),
                        inputformat: [
                          LengthLimitingTextInputFormatter(10),
                          NumLengthInputFormatter(digit: 2),
                        ],
                        title: '电力消耗(度)',
                        placeHold: '请输入',
                        textInput: this.powerConsumption,
                        clearAll: false,
                        require: false,
                      ),
                    ),
                    Container(
                      margin: EdgeInsets.fromLTRB(0, Styles.spacing8, 0, 0),
                      padding: EdgeInsets.fromLTRB(
                          Styles.spacing8, 0, Styles.spacing8, 0),
                      child: CustomInput(
                        textAlign: TextAlign.left,
                        keyboardType:
                        TextInputType.numberWithOptions(decimal: true),
                        inputformat: [
                          LengthLimitingTextInputFormatter(10),
                          NumLengthInputFormatter(digit: 2),
                        ],
                        title: '润滑油消耗(升)',
                        placeHold: '请输入',
                        textInput: this.lubricatingConsumption,
                        clearAll: false,
                        require: false,
                      ),
                    ),
                    Container(
                      color: Colors.white,
                      margin: EdgeInsets.fromLTRB(0, Styles.spacing8, 0, 0),
                      padding: EdgeInsets.fromLTRB(
                          Styles.spacing8, 0, Styles.spacing8, 0),
                      child: TextAreaWidget(
                        maxLength: 100,
                        labelText: '备注',
                        defaultValue: '',
                        placeholder: '请输入',
                        disabled: false,
                        required: false,
                        rows: 4,
                        onChange: (value) => this.setState(() {
                          remark = value;
                        }),
                      ),
                    ),
                  ],
                ),
              ),
            ),
          ),
        ),
        floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
        floatingActionButton: Container(
          padding: EdgeInsets.fromLTRB(
              Styles.spacing8, Styles.spacing8, Styles.spacing8, 10),
          child: Container(
            decoration: new BoxDecoration(
              //背景
              color: Styles.BlueColor,
              //设置四周圆角 角度
              borderRadius: BorderRadius.all(Radius.circular(12.0)),
            ),
            child: FlatButton(
              disabledColor: Styles.SelectColor,
              onPressed: () {
                FocusScope.of(context).requestFocus(new FocusNode());
                if (justify()) {
                  this.submit();
                }
              },
              child: Container(
                height: Styles.MainButtonHeight,
                alignment: Alignment.center,
                child: Text(
                  '保存',
                  style: TextStyle(
                      fontSize: Styles.MainButtonTextFont, color: Colors.white),
                ),
              ),
            ),
          ),
        ));
  }
}
